﻿using System.Net.Http;
using Newtonsoft.Json;

namespace DotNetStar.OpenSDK.WeChat.Open
{
    /// <summary>
    /// 表示获取在微信开放平台的应用 accesss_token 请求。 https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421140183
    /// </summary>
    /// <seealso cref="ApiRequest{AppAccessTokenResponse}" />
    public class ClientAccessTokenApiRequest : ApiRequest<ClientAccessTokenResponse>
    {
        /// <summary>
        /// 初始化 <see cref="ClientAccessTokenApiRequest"/> 类的新实例。
        /// </summary>
        /// <param name="config">应用相关的配置。</param>
        public ClientAccessTokenApiRequest(ClientConfig config)
            : base("https://api.weixin.qq.com/cgi-bin/token")
        {
            this.AppId = config.ClientId;
            this.Secret = config.ClientKey;
        }

        /// <summary>
        /// 获取 AppId。
        /// </summary>
        public string AppId { get; }
        /// <summary>
        /// 获取密钥。
        /// </summary>
        public string Secret { get;}

        /// <summary>
        /// 获取授权类型。
        /// </summary>
        public string Grant_Type => "client_credential";

        /// <summary>
        /// 处理自定义请求结果的回调。
        /// </summary>
        /// <param name="httpResponse">Http 请求响应的 <see cref="T:System.Net.Http.HttpResponseMessage" /> 实例。</param>
        /// <returns>
        /// 自定义的处理结果。
        /// </returns>
        public override ClientAccessTokenResponse ResponseHandler(HttpResponseMessage httpResponse) => SDK.Deserialize<ClientAccessTokenResponse>(httpResponse.GetContentAsString());
    }
}
